package com.kakarote.admin.service;

import com.kakarote.admin.entity.BO.AdminDeleteByBatchIdBO;
import com.kakarote.admin.entity.BO.RenameFileBO;
import com.kakarote.admin.entity.PO.AdminFile;
import com.kakarote.common.upload.entity.UploadEntity;
import com.kakarote.core.feign.admin.entity.FileEntity;
import com.kakarote.core.servlet.BaseService;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collection;
import java.util.List;

/**
 * <p>
 * 附件表 服务类
 * </p>
 *
 * @author zhangzhiwei
 * @since 2020-04-27
 */
public interface IAdminFileService extends BaseService<AdminFile> {

    /**
     * 上传文件
     *
     * @param file     文件对象
     * @param batchId  batchId
     * @param type     type
     * @param isPublic 是否公共文件
     * @return entity
     */
    public com.kakarote.core.entity.UploadEntity upload(MultipartFile file, String batchId, String type, Integer isPublic);


    /**
     * 上传临时文件，此文件会七天后删除
     *
     * @param file    文件对象
     * @param batchId batchId
     * @return entity
     */
    public com.kakarote.core.entity.UploadEntity uploadTempFile(MultipartFile file, String batchId);

    /**
     * 单一文件上传
     *
     * @param file:文件体
     * @param batchId:文件上传流
     * @param type:类型
     * @param isPublic:isPublic
     * @return 文件属性类
     */
    public com.kakarote.core.entity.UploadEntity uploadBySingle(MultipartFile file, String batchId, String type, Integer isPublic);

    /**
     * 获取文件列表
     *
     * @param batchId batchId
     * @return data
     */
    public List<FileEntity> queryFileList(String batchId);

    /**
     * 获取文件列表
     *
     * @param batchIdList batchIdList
     * @return data
     */
    public List<FileEntity> queryFileList(List<String> batchIdList);

    /**
     * 通过文件ID查询
     *
     * @param fileId 文件ID
     * @return data
     */
    public FileEntity queryById(Long fileId);

    /**
     * 获取单个文件
     *
     * @param batchId batchId
     * @return data
     */
    public FileEntity queryOneByBatchId(String batchId);

    /**
     * 通过文件ID删除
     *
     * @param fileId 文件ID
     * @return data
     */
    public AdminFile deleteById(Long fileId);

    /**
     * 通过batchId删除
     *
     * @param batchId batchId
     * @return data
     */
    public void deleteByBatchId(List<String> batchId);

    /**
     * 下载文件
     *
     * @param response response
     * @param fileId   fileId
     */
    public AdminFile down(HttpServletResponse response, Long fileId);

    /**
     * 获取文件流
     *
     * @param upload   文件上传信息
     * @param response response
     */
    void getFileStreamByPath(UploadEntity upload, HttpServletResponse response);

    /**
     * 修改附件名称
     *
     * @param renameFileBO data
     */
    void renameFileById(RenameFileBO renameFileBO);

    /**
     * 查询文件数量
     *
     * @param batchId batchId
     * @return num
     */
    public Integer queryNum(List<String> batchId);


    /**
     * 复制文件
     *
     * @param batchId 文件batchId
     * @return 新的batchId
     */
    String copyFile(String batchId);

    /**
     * 根据文件id查询文件实体
     *
     * @param fileIds:文件id
     * @return 文件对象
     */
    List<FileEntity> queryByIds(Collection<Long> fileIds);

    /**
     * 根据文件上传流删除
     *
     * @param deleteByBatchIdBO data
     */
    void deleteByBatchId(AdminDeleteByBatchIdBO deleteByBatchIdBO);

    /**
     * 修改文件batchId
     * @param oldBatchId 原batchId
     * @param newBatchId 新batchId
     */
    void updateFileBatchId(String oldBatchId, String newBatchId);

    /**
     * 获取文件base64
     *
     * @param fileId   文件ID
     * @param response response
     */
    String getFileBaseById(Long fileId, HttpServletResponse response) throws IOException;
}
